"""
演示：带参数的多线程代码：
    线程涉及到的参数如下：
        target：         关联的是当前线程要执行的函数名
        name：           设置当前线程的名字
        args:            以元祖的形式，给当前线程关联的函数传参。
        kwargs：         以字典的形式，给当前线程关联的函数传参。

    细节：
        1：args方式传参，实参的个数和数据类型，顺序必须要和线程关联的函数形参列表一致。
        2：kwargs方式传参，实参的个数和数据类型必须要和线程关联的函数的形参一致，但是顺序无所谓。
        3：线程的默认命名规则是：Thread-编号，编号从1开始，例如：Thread-1，Thread-2。。。。
"""
import os
import threading
import time


# 1: 定义函数，表示写代码
def coding(name, num):
    for i in range(num):
        print(f"{name}，正在写第{i}行代码...")
        time.sleep(1) # 休眠1秒

# 1：定义函数，表示听音乐
def music(name, count):
    for i in range(count):
        print(f"{name}，正在听第{i}首音乐...")
        time.sleep(1) # 休眠1秒

# 一心可以二用
if __name__ == '__main__':
    # 2：创建线程对象，关联：要执行任务（函数）
    p1 = threading.Thread(target=coding, name="小王", args=("小王", 10))
    p2 = threading.Thread(target=music, name="小李", kwargs={"count":10, "name":"小李"})

    # 3: 开启线程
    p1.start()
    p2.start()

    # # 4：打印线程的名（子线程）
    # print(f"p1进程的名字：{p1.name},id:{p1.pid}")
    # print(f"p2进程的名字：{p2.name},id:{p2.pid}")
    #
    # # 打印主进程的名字
    # print(f"主进程的ID：{multiprocessing.current_process().pid}, 名字：{multiprocessing.current_process().name}, 它的父进程ID为：{os.getppid()}")